package com.warom.sdg.repository;

import android.content.Context;
import android.util.Log;

import com.warom.sdg.model.DeviceType;
import com.warom.sdg.util.LogUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;

/**
 * 设备类型数据仓库
 * 用于管理设备类型的获取和缓存
 */
public class PlcDeviceTypeRepository {
    private static final String TAG = "PlcDeviceTypeRepository";
    
    private Context context;
    
    public PlcDeviceTypeRepository(Context context) {
        this.context = context;
    }
    
    /**
     * 获取所有设备类型
     * @param successCallback 成功回调，接收设备类型列表
     * @param errorCallback 错误回调，接收错误信息
     */
    public void getAllDeviceTypes(Consumer<List<DeviceType>> successCallback, Consumer<String> errorCallback) {
        try {
            LogUtils.logOperation("设备类型", "查询", "开始获取设备类型列表");
            
            // 获取所有设备类型
            List<DeviceType> deviceTypes = DeviceType.getAllDeviceTypes();
            
            LogUtils.logOperation("设备类型", "查询结果", "获取到 " + deviceTypes.size() + " 个设备类型");
            
            // 直接返回结果
            successCallback.accept(deviceTypes);
        } catch (Exception e) {
            Log.e(TAG, "获取设备类型列表失败", e);
            LogUtils.logError("设备类型", "获取设备类型列表失败", e);
            errorCallback.accept("获取设备类型列表失败: " + e.getMessage());
        }
    }
    
    /**
     * 同步获取所有设备类型
     * @return 设备类型列表
     */
    public List<DeviceType> getAllDeviceTypesSync() {
        try {
            return DeviceType.getAllDeviceTypes();
        } catch (Exception e) {
            Log.e(TAG, "同步获取设备类型列表失败", e);
            return new ArrayList<>();
        }
    }
    
    /**
     * 根据ID获取设备类型
     * @param id 设备类型ID
     * @return 设备类型，如果未找到返回null
     */
    public DeviceType getDeviceTypeById(int id) {
        return DeviceType.getById(id);
    }
    
    /**
     * 获取设备类型的显示名称
     * @param id 设备类型ID
     * @return 设备类型显示名称，如果未找到返回"未知类型"
     */
    public String getDeviceTypeDisplayName(int id) {
        DeviceType type = getDeviceTypeById(id);
        return type != null ? type.getDisplayName() : "未知类型";
    }
} 